import 'package:flutter_wifi/entity/DeviceEntity.dart';
import 'package:flutter_wifi/entity/TrackEntity.dart';
import 'package:mybase/base/abstract/IFFR.dart';
import 'package:mybase/base/tool/api/ApiUtils.dart';
import 'package:mybase/base/tool/empty/FFEmpty.dart';

class MusicApi {
  // 函数注释>检测服务器是否还在
  // 函数名>heart
  // 请求地址不带/>heart
  // 请求方式1:get,2:post>1
  // 响应是1:Map,2:List>1
  // 收受实体类名>data
  // 请求参数以逗号分隔>
  /**
   *  检测服务器是否还在
   */
  static Future<IFFR<T>> heart<T>() async {
    Map<String, dynamic> param = {};

    IFFR<T> r = await ApiUtils.methodAwait<T>(ApiUtils.GetMethod, "heart", param: param);
    ApiUtils.handleIFFRProperties(r, parse: (data) {
      return data;
    });
    return r;
  }

  // 函数注释>删除指定文件
  // 函数名>delete
  // 请求地址不带/>delete
  // 请求方式1:get,2:post>1
  // 响应是1:Map,2:List>1
  // 收受实体类名>1
  // 请求参数以逗号分隔>sqlid
  /**
   *  删除指定文件
   */
  static Future<IFFR<T>> delete<T>({
    String? sqlid,
  }) async {
    Map<String, dynamic> param = {};
    if (!FFEmpty.stringIsEmpty(sqlid)) {
      param["sqlid"] = sqlid;
    }

    IFFR<T> r = await ApiUtils.methodAwait<T>(ApiUtils.GetMethod, "delete", param: param);
    ApiUtils.handleIFFRProperties(r, parse: (data) {
      return data;
    });
    return r;
  }

  // 函数注释>设备信息
  // 函数名>device
  // 请求地址不带/>device
  // 请求方式1:get,2:post>1
  // 响应是1:Map,2:List>1
  // 收受实体类名>Data
  // 请求参数以逗号分隔>
  /**
   *  设备信息
   */
  static Future<IFFR<T>> device<T>() async {
    Map<String, dynamic> param = {};

    IFFR<T> r = await ApiUtils.methodAwait<T>(ApiUtils.GetMethod, "device", param: param);
    ApiUtils.handleIFFRProperties(r, parse: (data) {
      return DeviceEntity.fromJson(data);
    });
    return r;
  }

  // 函数注释>请求手机歌曲列表
  // 函数名>getMusicList
  // 请求地址不带/>musicList
  // 请求方式1:get,2:post>1
  // 响应是1:Map,2:List>2
  // 收受实体类名>Entity
  // 请求参数以逗号分隔>page,limit
  /**
   * 请求手机歌曲列表
   */
  static Future<IFFR<L>> getMusicList<L, E>({
    required String? page,
    String? limit,
  }) async {
    Map<String, dynamic> param = {};
    if (!FFEmpty.stringIsEmpty(page)) {
      param["page"] = page;
    }
    if (!FFEmpty.stringIsEmpty(limit)) {
      param["limit"] = limit;
    }

    IFFR<L> r = await ApiUtils.methodAwait(ApiUtils.GetMethod, "musicList", param: param);
    ApiUtils.handleIFFRProperties(r, paging: true, limit: limit ?? ApiUtils.PAGELIMIT,
        /*needParseData: (orig) {return ApiUtils.needParseData_plist(orig, "lists");},*/
        parse: (data) {
      return ApiUtils.handleIFFRList<E>(data, parseList: (item) {
        return TrackEntity.fromJson(item);
      });
    });
    return r;
  }
}
